\section{常量}
常量是一个简单值的标识符（名字）。如同其名称所暗示的，在脚本执行期间该值不能改变。传统上常量标识符总是大写的。

常量名和其它任何 PHP 标签遵循同样的命名规则。合法的常量名以字母或下划线开始，后面跟着任何字母，数字或下划线。另外，PHP内部已经使用了一些关键字，这些关键字不能再用来声明常量，全部关键字参见附录\ref{chap:keywords}。

常量的范围是全局的。也就是说，可以在脚本的任何地方访问常量。

\subsection{常量的定义}
使用define函数定义常量，还可以使用 const 关键字在类定义之外定义常量。一个常量一旦被定义，就不能再改变或者取消定义。如：

\begin{lstlisting}
<?php
define("FOO", "常量");
const CONSTANT = 'Hello World';

echo FOO,FOO2;
?>
\end{lstlisting}
\begin{myremark}{const与define()的区别}
使用 const 关键字定义常量必须处于最顶端的作用区域，因为用此方法是在编译时定义的。这就意味着不能在函数内，循环内以及 if 语句之内用 const 来定义常量。而define()函数则没有这些限制。
\end{myremark}

\subsection{魔术常量}
PHP 向它运行的任何脚本提供了大量的预定义常量（如PHP\_VERSION、PHP\_OS	等等）。不过很多常量都是由不同的扩展库定义的，只有在加载了这些扩展库时才会出现，或者动态加载后，或者在编译时已经包括进去了。

有八个魔术常量（见表\ref{tab:魔术常量})它们的值随着它们在代码中的位置改变而改变。例如 \_\_LINE\_\_ 的值就依赖于它在脚本中所处的行来决定。

% Table generated by Excel2LaTeX from sheet 'Sheet1'
\begin{table}[htbp]
  \centering
  \caption{PHP 的“魔术常量”}
    \begin{tabular}{ll}
    \toprule
    \multicolumn{1}{l}{\textbf{名称}} & \multicolumn{1}{l}{\textbf{说明}} \\
    \midrule
    \textbf{\_\_LINE\_\_} & 文件中的当前行号。 \\
    \textbf{\_\_FILE\_\_} & 文件的完整路径和文件名。 \\
    \textbf{\_\_DIR\_\_} & 文件所在的目录。 \\
    \textbf{\_\_FUNCTION\_\_} & 函数名称。 \\
    \textbf{\_\_CLASS\_\_} & 类的名称。 \\
    \textbf{\_\_TRAIT\_\_} & Trait 的名字。\\
    \textbf{\_\_METHOD\_\_} & 类的方法名。 \\
    \textbf{\_\_NAMESPACE\_\_} & 当前命名空间的名称。 \\
    \bottomrule
    \end{tabular}%
  \label{tab:魔术常量}%
\end{table}%
